import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 该数组最长严格上升子序列的长度
     * @param a int整型一维数组 给定的数组
     * @return int整型
     */
    public int LIS (int[] a) {
        int n=a.length;
        int []dp=new int[n];
        int pos=0;
        for (int x:a){
            int left=0,right=pos;
            while (left<right){
                int mid=left+(right-left)/2;
                if (dp[mid]>=x){
                    right=mid;
                }else {
                    left=mid+1;
                }
            }//?
            if (left==pos){
                dp[pos++]=x;
            }else {
                dp[left]=x;
            }
        }
        return pos;
    }
}
